package funcybxb

import "fmt"

func TestFuncDefine() {
	intSum := intSum(2, 3)
	fmt.Printf("intSum的值是:%d\n", intSum) // 打印：intSum的值是:5
	sum, sub := intOpt(10, 3)
	fmt.Printf("sum的值是:%d, sub的值是:%d\n", sum, sub) // 打印:sum的值是:13, sub的值是:7
}

// 方式1：返回值列表，a是具名返回值
// 函数的定义格式是：func 函数名(形参列表) (返回值列表) {函数体}
func intSum(x int, y int) (a int) {
	// fmt.Printf("x和y的值分别是%d, %d\n", x, y)
	a = x + y
	return // 注意：此时会返回参数a
}

// 方式2：
// 注意:函数返回多个值时，返回值类型必须用括号括起来
func intOpt(x int, y int) (int, int) {
	fmt.Printf("x和y的值分别是%d, %d\n", x, y)
	sum := x + y
	var sub = x - y
	return sum, sub
}

// 定义匿名函数
func TestAnonymityFunc() {
	// 将匿名函数fun赋给变量anonFun
	// 则变量anonFun的数据类型是函数类型，可以通过anonFun完成调用
	anonFun := func(x int, y int) (a int) {
		return x + y
	}
	fmt.Printf("%T\n", anonFun) // 打印结果：func(int, int) int
	fmt.Println("anon_fun的值是:", anonFun(1, 2))
	fmt.Println("anon_fun的值是:", anonFun(3, 4))
}
